home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Very Best of Atari Inside
/
The Very Best of Atari Inside 1.iso
/
mint
/
mint110s
/
asmtab.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-08-16
|
22KB
|
775 lines
#ifndef lint
char yysccsid[] = "@(#)yaccpar 1.3 (Berkeley) 01/21/90";
#endif
#define WORD 257
#define WHITESP 258
#define EOLN 259
#define STRING 260
#define DEFINECMD 261
#define INCLUDECMD 262
#define IFDEFCMD 263
#define IFNDEFCMD 264
#define ELSECMD 265
#define ENDIFCMD 266
#define YYERRCODE 256
#line 3 "asm.y"
#define YYSTYPE char *
#include "asmtrans.h"
#line 19 "y_tab.c"
short yylhs[] = { -1,
0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 3, 3, 3, 3, 6, 6,
5, 2, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 7, 7, 7, 8, 8,
9, 9, 9, 9,
};
short yylen[] = { 2,
0, 2, 1, 2, 2, 3, 4, 4, 6, 6,
4, 4, 2, 2, 2, 4, 3, 5, 1, 3,
1, 2, 1, 2, 3, 4, 4, 4, 4, 6,
6, 11, 11, 5, 7, 1, 3, 2, 1, 2,
1, 1, 1, 1,
};
short yydefred[] = { 1,
0, 0, 0, 3, 0, 0, 0, 0, 0, 0,
2, 0, 0, 0, 22, 21, 0, 0, 0, 0,
0, 13, 14, 0, 4, 0, 5, 0, 0, 0,
0, 0, 0, 0, 6, 0, 39, 0, 0, 0,
0, 0, 16, 0, 0, 0, 8, 7, 11, 12,
18, 0, 24, 0, 0, 0, 38, 40, 0, 0,
0, 41, 42, 43, 44, 0, 0, 0, 0, 0,
0, 20, 0, 0, 37, 9, 10, 0, 0, 29,
26, 27, 0, 28, 0, 0, 0, 34, 0, 0,
0, 0, 0, 30, 31, 0, 0, 35, 0, 0,
0, 0, 0, 0, 33, 32,
};
short yydgoto[] = { 1,
11, 12, 13, 42, 17, 43, 44, 45, 66,
};
short yysindex[] = { 0,
-168, -47, -235, 0, -226, -224, -217, -215, -210, -202,
0, -203, -201, -235, 0, 0, -214, -198, -221, -197,
-195, 0, 0, -193, 0, -196, 0, -192, -33, -191,
-189, -185, -184, -180, 0, -33, 0, -28, -30, -27,
-177, 24, 0, -24, -12, -35, 0, 0, 0, 0,
0, -28, 0, -28, 40, -28, 0, 0, -33, -28,
-28, 0, 0, 0, 0, -28, -175, -174, -17, -29,
41, 0, 4, 28, 0, 0, 0, -28, 9, 0,
0, 0, -28, 0, -28, -15, -28, 0, 51, -25,
-28, 57, 62, 0, 0, 12, -28, 0, 63, 64,
-28, -28, 65, 68, 0, 0,
};
short yyrindex[] = { 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, -149, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, -148, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, -147, 0, -40, -21, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, -23,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
};
short yygindex[] = { 0,
0, 0, 101, 69, 100, -8, -14, 0, 0,
};
#define YYTABLESIZE 238
short yytable[] = { 38,
41, 38, 41, 23, 39, 41, 39, 41, 41, 40,
15, 40, 56, 81, 52, 60, 52, 52, 36, 36,
25, 16, 36, 53, 55, 57, 78, 51, 91, 64,
62, 18, 63, 19, 65, 31, 36, 57, 32, 69,
20, 71, 21, 29, 84, 73, 74, 83, 22, 88,
72, 75, 87, 24, 3, 25, 23, 27, 30, 33,
54, 34, 35, 86, 14, 36, 46, 59, 89, 47,
90, 36, 93, 48, 49, 79, 96, 92, 50, 58,
70, 82, 100, 76, 77, 85, 103, 104, 2, 3,
4, 94, 5, 6, 7, 8, 9, 10, 61, 95,
97, 36, 98, 36, 99, 105, 101, 102, 106, 15,
17, 19, 26, 28, 68, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
14, 0, 0, 0, 0, 0, 0, 0, 23, 0,
0, 37, 0, 37, 67, 0, 37, 80, 37, 37,
0, 0, 0, 0, 0, 25, 0, 36,
};
short yycheck[] = { 35,
36, 35, 36, 44, 40, 36, 40, 36, 36, 45,
58, 45, 40, 43, 45, 40, 45, 45, 40, 41,
44, 257, 44, 38, 39, 40, 44, 36, 44, 42,
43, 258, 45, 258, 47, 257, 58, 52, 260, 54,
258, 56, 258, 258, 41, 60, 61, 44, 259, 41,
59, 66, 44, 257, 258, 259, 259, 259, 257, 257,
91, 257, 259, 78, 258, 258, 258, 44, 83, 259,
85, 93, 87, 259, 259, 93, 91, 93, 259, 257,
41, 41, 97, 259, 259, 58, 101, 102, 257, 258,
259, 41, 261, 262, 263, 264, 265, 266, 123, 125,
44, 123, 41, 125, 93, 41, 44, 44, 41, 259,
259, 259, 12, 14, 46, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
258, -1, -1, -1, -1, -1, -1, -1, 259, -1,
-1, 257, -1, 257, 260, -1, 257, 257, 257, 257,
-1, -1, -1, -1, -1, 259, -1, 259,
};
#define YYFINAL 1
#ifndef YYDEBUG
#define YYDEBUG 0
#endif
#define YYMAXTOKEN 266
#if YYDEBUG
char *yyname[] = {
"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,"'#'","'$'",0,0,0,"'('","')'","'*'","'+'","','","'-'",0,"'/'",0,0,0,0,0,0,0,0,
0,0,"':'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",
0,"']'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,"WORD","WHITESP","EOLN","STRING","DEFINECMD","INCLUDECMD",
"IFDEFCMD","IFNDEFCMD","ELSECMD","ENDIFCMD",
};
char *yyrule[] = {
"$accept : input",
"input :",
"input : input line",
"line : EOLN",
"line : label EOLN",
"line : opline EOLN",
"line : label opline EOLN",
"line : INCLUDECMD WHITESP STRING EOLN",
"line : INCLUDECMD WHITESP WORD EOLN",
"line : DEFINECMD WHITESP WORD WHITESP STRING EOLN",
"line : DEFINECMD WHITESP WORD WHITESP operand EOLN",
"line : IFDEFCMD WHITESP WORD EOLN",
"line : IFNDEFCMD WHITESP WORD EOLN",
"line : ELSECMD EOLN",
"line : ENDIFCMD EOLN",
"opline : WHITESP opcode",
"opline : WHITESP opcode WHITESP ops",
"opline : WORD WHITESP opcode",
"opline : WORD WHITESP opcode WHITESP ops",
"ops : operand",
"ops : operand ',' ops",
"opcode : WORD",
"label : WORD ':'",
"operand : basic",
"operand : '#' basic",
"operand : '(' basic ')'",
"operand : '(' basic ')' '+'",
"operand : '-' '(' basic ')'",
"operand : basic '(' basic ')'",
"operand : '(' basic ')' WORD",
"operand : basic '(' basic ',' basic ')'",
"operand : basic '{' basic ':' basic '}'",
"operand : '(' '[' basic ',' basic ']' ',' basic ',' basic ')'",
"operand : '(' '[' basic ',' basic ',' basic ']' ',' basic ')'",
"operand : '(' '[' basic ']' ')'",
"operand : '(' '[' basic ']' ',' basic ')'",
"basic : basexpr",
"basic : basexpr op basic",
"basic : '-' basic",
"basexpr : WORD",
"basexpr : '$' WORD",
"op : '+'",
"op : '-'",
"op : '*'",
"op : '/'",
};
#endif
#ifndef YYSTYPE
typedef int YYSTYPE;
#endif
#define yyclearin (yychar=(-1))
#define yyerrok (yyerrflag=0)
#ifndef YYSTACKSIZE
#ifdef YYMAXDEPTH
#define YYSTACKSIZE YYMAXDEPTH
#else
#define YYSTACKSIZE 300
#endif
#endif
int yydebug;
int yynerrs;
int yyerrflag;
int yychar;
short *yyssp;
YYSTYPE *yyvsp;
YYSTYPE yyval;
YYSTYPE yylval;
#define yystacksize YYSTACKSIZE
short yyss[YYSTACKSIZE];
YYSTYPE yyvs[YYSTACKSIZE];
#line 103 "asm.y"
#include <setjmp.h>
jmp_buf start;
#ifdef NATIVEATARI
#define STACK 32*1024L
#ifdef LATTICE
long _STACK = STACK;
#endif
#ifdef __GNUC__
long _stksize = STACK;
#endif
static void
hit_return()
{
printf("Hit return to continue\n");
fflush(stdout);
getchar();
}
#endif
void usage()
{
fprintf(stderr, "Usage: asmtrans [-gas][-asm][-o outfile] infile\n");
exit(2);
}
int errors = 0;
void
do_include(file)
char *file;
{
jmp_buf save;
FILE *oldin, *f;
f = fopen(file, "rt");
if (!f) {
perror(file);
return;
}
bcopy(start, save, sizeof(jmp_buf));
oldin = infile;
infile = f;
setjmp(start);
yyparse();
fclose(f);
infile = oldin;
bcopy(save, start, sizeof(jmp_buf));
longjmp(start,1);
}
/* set up initial definitions based on syntax type */
void
do_initial_defs()
{
if (syntax == GAS) {
do_define("mmusr", "psr");
do_define("fpiar", "fpi");
do_define("XREF", ".globl");
do_define("XDEF", ".globl");
do_define("TEXT", ".text");
do_define("DATA", ".data");
/* gas doesn't have a .bss directive */
do_define("BSS", ".data");
do_define("END", "| END");
do_define("dc.l", ".long");
do_define("dc.w", ".word");
do_define("dc.b", ".byte");
} else if (syntax == ASM) {
do_define("TEXT", "SECTION TEXT,CODE");
do_define("DATA", "SECTION DATA,DATA");
do_define("BSS", "SECTION BSS,BSS");
}
}
int
main (argc, argv)
int argc; char **argv;
{
FILE *f;
#ifdef NATIVEATARI
if (!argv[0] || !argv[0][0]) /* run from desktop? */
atexit(hit_return);
#endif
argv++;
outfile = stdout;
while (*argv) {
if (!strcmp(*argv, "-o")) {
argv++;
if (*argv == 0) {
fprintf(stderr, "missing argument to -o\n");
usage();
}
f = fopen(*argv, "wt");
if (!f)
perror(*argv);
else
outfile = f;
argv++;
} else if (!strcmp(*argv, "-gas")) {
argv++;
syntax = GAS;
} else if (!strcmp(*argv, "-asm")) {
argv++;
syntax = ASM;
} else if (!strcmp(*argv, "-purec")) {
argv++;
syntax = PUREC;
} else if (!strncmp(*argv, "-D", 2)) {
char *word, *defn;
word = *argv+2;
defn = index(word,'=');
if (defn)
*defn++ = '\0';
else
defn = "1";
if (*word) do_define(word,defn);
argv++;
} else if (!strcmp(*argv, "--")) {
argv++;
break;
} else {
if (**argv == '-') {
fprintf(stderr, "unknown option: %s\n",
*argv);
usage();
}
break;
}
}
do_initial_defs();
if (*argv == 0) {
setjmp(start);
infile = stdin;
yyparse();
} else {
while(*argv) {
if (!(f = fopen(*argv, "rt")))
perror(*argv);
else {
infile = f;
setjmp(start);
yyparse();
fclose(f);
}
argv++;
}
}
if (ifstkptr != 0) {
fputs("%ifdef without matching %endif\n", stderr);
errors++;
}
return errors;
}
void
yyerror (s) /* Called by yyparse on error */
char *s;
{
errors++;
printf("%s\n", s);
longjmp(start, 1);
}
void dbgmsg(s) char *s;
{
fprintf(stderr, "%s\n", s);
}
#line 396 "y_tab.c"
#define YYABORT goto yyabort
#define YYACCEPT goto yyaccept
#define YYERROR goto yyerrlab
int
yyparse()
{
register int yym, yyn, yystate;
#if YYDEBUG
register char *yys;
extern char *getenv();
if (yys = getenv("YYDEBUG"))
{
yyn = *yys;
if (yyn == '0')
yydebug = 0;
else if (yyn >= '1' && yyn <= '9')
yydebug = yyn - '0';
}
#endif
yynerrs = 0;
yyerrflag = 0;
yychar = (-1);
yyssp = yyss;
yyvsp = yyvs;
*yyssp = yystate = 0;
yyloop:
if (yyn = yydefred[yystate]) goto yyreduce;
if (yychar < 0)
{
if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
if (yydebug)
{
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
printf("yydebug: state %d, reading %d (%s)\n", yystate,
yychar, yys);
}
#endif
}
if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
{
#if YYDEBUG
if (yydebug)
printf("yydebug: state %d, shifting to state %d\n",
yystate, yytable[yyn]);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
yychar = (-1);
if (yyerrflag > 0) --yyerrflag;
goto yyloop;
}
if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
{
yyn = yytable[yyn];
goto yyreduce;
}
if (yyerrflag) goto yyinrecovery;
#ifdef lint
goto yynewerror;
#endif
yynewerror:
yyerror("syntax error");
#ifdef lint
goto yyerrlab;
#endif
yyerrlab:
++yynerrs;
yyinrecovery:
if (yyerrflag < 3)
{
yyerrflag = 3;
for (;;)
{
if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
{
#if YYDEBUG
if (yydebug)
printf("yydebug: state %d, error recovery shifting\
to state %d\n", *yyssp, yytable[yyn]);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
goto yyoverflow;
}
*++yyssp = yystate = yytable[yyn];
*++yyvsp = yylval;
goto yyloop;
}
else
{
#if YYDEBUG
if (yydebug)
printf("yydebug: error recovery discarding state %d\n",
*yyssp);
#endif
if (yyssp <= yyss) goto yyabort;
--yyssp;
--yyvsp;
}
}
}
else
{
if (yychar == 0) goto yyabort;
#if YYDEBUG
if (yydebug)
{
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
printf("yydebug: state %d, error recovery discards token %d (%s)\n",
yystate, yychar, yys);
}
#endif
yychar = (-1);
goto yyloop;
}
yyreduce:
#if YYDEBUG
if (yydebug)
printf("yydebug: state %d, reducing by rule %d (%s)\n",
yystate, yyn, yyrule[yyn]);
#endif
yym = yylen[yyn];
yyval = yyvsp[1-yym];
switch (yyn)
{
case 3:
#line 25 "asm.y"
{ emit(yyvsp[0]); }
break;
case 4:
#line 28 "asm.y"
{ emit(yyvsp[-1]); emit(yyvsp[0]); }
break;
case 5:
#line 29 "asm.y"
{ emit(yyvsp[-1]); emit(yyvsp[0]); }
break;
case 6:
#line 30 "asm.y"
{ emit(yyvsp[-2]); emit(yyvsp[-1]);
emit(yyvsp[0]); }
break;
case 7:
#line 32 "asm.y"
{ if (!hidecnt) do_include(yyvsp[-1]); free(yyvsp[-1]); }
break;
case 8:
#line 33 "asm.y"
{ if (!hidecnt) do_include(yyvsp[-1]); free(yyvsp[-1]); }
break;
case 9:
#line 34 "asm.y"
{
if (!hidecnt) do_define(yyvsp[-3], yyvsp[-1]); free(yyvsp[-3]); free(yyvsp[-1]); }
break;
case 10:
#line 36 "asm.y"
{
if (!hidecnt) do_define(yyvsp[-3], yyvsp[-1]); free(yyvsp[-3]); free(yyvsp[-1]); }
break;
case 11:
#line 38 "asm.y"
{ do_ifdef(yyvsp[-1]); free(yyvsp[-1]); }
break;
case 12:
#line 39 "asm.y"
{ do_ifndef(yyvsp[-1]); free(yyvsp[-1]); }
break;
case 13:
#line 40 "asm.y"
{ do_else(); }
break;
case 14:
#line 41 "asm.y"
{ do_endif(); }
break;
case 15:
#line 44 "asm.y"
{ yyval = do_ops("", yyvsp[0], "", ""); free(yyvsp[0]); }
break;
case 16:
#line 46 "asm.y"
{ yyval = do_ops("", yyvsp[-2], yyvsp[-1], yyvsp[0]);
free(yyvsp[-2]); free(yyvsp[-1]); free(yyvsp[0]); }
break;
case 17:
#line 48 "asm.y"
{ yyval = do_ops(yyvsp[-2], yyvsp[0], "", ""); free(yyvsp[-2]); free(yyvsp[0]); }
break;
case 18:
#line 50 "asm.y"
{ yyval = do_ops(yyvsp[-4], yyvsp[-2], yyvsp[-1], yyvsp[0]);
free(yyvsp[-4]); free(yyvsp[-2]); free(yyvsp[-1]); free(yyvsp[0]);}
break;
case 19:
#line 54 "asm.y"
{ yyval = yyvsp[0]; }
break;
case 20:
#line 55 "asm.y"
{ yyval = concat3(yyvsp[-2], ",", yyvsp[0]);
free(yyvsp[-2]); free(yyvsp[0]); }
break;
case 21:
#line 59 "asm.y"
{ yyval = wordlookup(yyvsp[0]); free(yyvsp[0]); }
break;
case 22:
#line 62 "asm.y"
{ yyval = concat(yyvsp[-1], ":"); free(yyvsp[-1]); }
break;
case 23:
#line 64 "asm.y"
{yyval = yyvsp[0]; }
break;
case 24:
#line 65 "asm.y"
{yyval = immediate(yyvsp[0]); free(yyvsp[0]); }
break;
case 25:
#line 66 "asm.y"
{yyval = indirect(yyvsp[-1]); free(yyvsp[-1]); }
break;
case 26:
#line 67 "asm.y"
{yyval = postinc(yyvsp[-2]); free(yyvsp[-2]); }
break;
case 27:
#line 68 "asm.y"
{yyval = predec(yyvsp[-1]); free(yyvsp[-1]); }
break;
case 28:
#line 69 "asm.y"
{yyval = indexed(yyvsp[-3], yyvsp[-1]); free(yyvsp[-3]); free(yyvsp[-1]); }
break;
case 29:
#line 70 "asm.y"
{yyval = sizedop(yyvsp[-2], yyvsp[0]); free(yyvsp[-2]); free(yyvsp[0]); }
break;
case 30:
#line 71 "asm.y"
{yyval = twoindex(yyvsp[-5], yyvsp[-3], yyvsp[-1]);
free(yyvsp[-5]); free(yyvsp[-3]); free(yyvsp[-1]); }
break;
case 31:
#line 73 "asm.y"
{yyval = bitfield(yyvsp[-5], yyvsp[-3], yyvsp[-1]);
free(yyvsp[-5]); free(yyvsp[-3]); free(yyvsp[-1]); }
break;
case 32:
#line 76 "asm.y"
{ yyval =postindex(yyvsp[-8],yyvsp[-6],yyvsp[-3],yyvsp[-1]);
free(yyvsp[-8]); free(yyvsp[-6]); free(yyvsp[-3]); free(yyvsp[-1]); }
break;
case 33:
#line 79 "asm.y"
{ yyval =preindex(yyvsp[-8],yyvsp[-6],yyvsp[-4],yyvsp[-1]);
free(yyvsp[-8]); free(yyvsp[-6]); free(yyvsp[-4]); free(yyvsp[-1]); }
break;
case 34:
#line 82 "asm.y"
{ yyval =postindex0(yyvsp[-2]);
free(yyvsp[-2]); }
break;
case 35:
#line 85 "asm.y"
{ yyval =postindex1(yyvsp[-4],yyvsp[-1]);
free(yyvsp[-4]); free(yyvsp[-1]); }
break;
case 36:
#line 89 "asm.y"
{ yyval = yyvsp[0]; }
break;
case 37:
#line 90 "asm.y"
{ yyval = concat3(yyvsp[-2], yyvsp[-1], yyvsp[0]); free(yyvsp[-2]); free(yyvsp[-1]); free(yyvsp[0]); }
break;
case 38:
#line 91 "asm.y"
{ yyval = concat("-", yyvsp[0]); free(yyvsp[0]); }
break;
case 39:
#line 93 "asm.y"
{yyval = wordlookup(yyvsp[0]); free(yyvsp[0]); }
break;
case 40:
#line 94 "asm.y"
{yyval = hexop(yyvsp[0]); free(yyvsp[0]);}
break;
case 41:
#line 97 "asm.y"
{ yyval = strdup("+"); }
break;
case 42:
#line 98 "asm.y"
{ yyval = strdup("-"); }
break;
case 43:
#line 99 "asm.y"
{ yyval = strdup("*"); }
break;
case 44:
#line 100 "asm.y"
{ yyval = strdup("/"); }
break;
#line 718 "y_tab.c"
}
yyssp -= yym;
yystate = *yyssp;
yyvsp -= yym;
yym = yylhs[yyn];
if (yystate == 0 && yym == 0)
{
#ifdef YYDEBUG
if (yydebug)
printf("yydebug: after reduction, shifting from state 0 to\
state %d\n", YYFINAL);
#endif
yystate = YYFINAL;
*++yyssp = YYFINAL;
*++yyvsp = yyval;
if (yychar < 0)
{
if ((yychar = yylex()) < 0) yychar = 0;
#if YYDEBUG
if (yydebug)
{
yys = 0;
if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
if (!yys) yys = "illegal-symbol";
printf("yydebug: state %d, reading %d (%s)\n",
YYFINAL, yychar, yys);
}
#endif
}
if (yychar == 0) goto yyaccept;
goto yyloop;
}
if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
yystate = yytable[yyn];
else
yystate = yydgoto[yym];
#ifdef YYDEBUG
if (yydebug)
printf("yydebug: after reduction, shifting from state %d \
to state %d\n", *yyssp, yystate);
#endif
if (yyssp >= yyss + yystacksize - 1)
{
goto yyoverflow;
}
*++yyssp = yystate;
*++yyvsp = yyval;
goto yyloop;
yyoverflow:
yyerror("yacc stack overflow");
yyabort:
return (1);
yyaccept:
return (0);
}